package collection.stream;

import java.util.ArrayList;
import java.util.List;
import java.util.Optional;

/**
 * 常见的终端环节
 */
public class StreamApiDemo2 {
    public static void main(String[] args) {
        List<Integer> list = new ArrayList<>();
        for (int i = 0; i < 3; i++){
            list.add((int) (Math.random() * 100));
        }
        System.out.println(list);
        /*
        创建的终端环节
        1.min max
        用于获取集合中的最大值和最小值
        2.anyMatch
        用于判断集合中的元素是否满足条件
        3.allMatch
        用于判断集合中的元素是否都满足条件
        4.noneMatch
        用于判断集合中的元素是否都不满足条件
        5.reduce
        积累操作

        4.forEach
        用于遍历集合中的元素
         */

        /*
        Optional 是一个容器，可以存储一个值，由于集合中可能没有值，
        所以使用 Optional 容器来存储集合中的元素。
        如果值存在，则 isPresent() 方法返回 true，否则返回 false。
         */

        Optional<Integer> min = list.stream().min((e1, e2)->e1-e2);
        System.out.println(min.get());

        Optional<Integer> max = list.stream().max((e1, e2)->e1-e2);
        System.out.println(max.get());

        boolean b = list.stream().anyMatch(e->e%2==0);
        System.out.println("是否有偶数:" + b);

        boolean b1 = list.stream().allMatch(e->e%2==0);
        System.out.println("是否全部是偶数:" + b1);

        boolean b2 = list.stream().noneMatch(e->e%2==0);
        System.out.println("是否全部不是偶数:" + b2);

        /*
        (e1, e2) -> e1-e2
        第一次会将集合中的第一个元素和第二个元素相加
        第二次会将结果和第三个元素相加
        ...
         */
        int sum = list.stream().reduce((e1, e2)->e1+e2).get();
        System.out.println(sum);

        // list.stream().forEach(e-> System.out.println(e));


    }
}
